﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TaxiCaosWeb.Models;
using System.ServiceModel;
using System.Net;

namespace TaxiCaosWeb.Controllers
{
    public class PagoController : Controller
    {

        //Visualización de la vista
        public ActionResult Pago()
        {
            //Se obtiene los datos de las sessiones almacenadas
            ReservasWS.Reserva ReservaRegistradaSession = (ReservasWS.Reserva)Session["ReservaRegistrada"]; 
            TarifarioDescuento TarifarioDescuentoSession = (TarifarioDescuento)Session["TarifarioDescuento"];

            Pago dPagos = new Pago();

            if (Session["ReservaRegistrada"] != null)
            {   
                dPagos.Importe = Convert.ToString(TarifarioDescuentoSession.MontoTotal);
                dPagos.IdReserva = Convert.ToString(ReservaRegistradaSession.IdReserva);
                dPagos.TicketReserva = Convert.ToString(ReservaRegistradaSession.Ticket);
            }
                      
            return View(dPagos);

        }

        //Realizar el Pago
        [HttpPost]
        public ActionResult Pago(FormCollection pagoForm)
        {
            //Se instancian los servicios WEB
            PagosWS_.PagosClient proxypayment = new PagosWS_.PagosClient();
            FacturasWS_.FacturasClient proxybilling = new FacturasWS_.FacturasClient();

            //Se inicializa la variable
            string MensajeEx = "";
            string TipoMensaje_ = "";

            //Constantes
            string sBank = "BBVA";
            string sCurrencyCd = "PEN";

            //Asignar el ID de Reserva
            string IdReserva_ = pagoForm.Get("IdReserva");
            //Asignar el Ticket de Reserva
            string TicketReserva_ = pagoForm.Get("TicketReserva");

            try
            {
                //Se invoca al servicio de registro del pago
                int _pago = proxypayment.RegistrarPago(sBank, pagoForm.Get("NumeroTarjeta"), sCurrencyCd, pagoForm.Get("Importe"));

                if (_pago != 0)
                {
                    try
                    {
                        //Si se registro el pago, se actualiza la factura asociada
                        bool _factura = proxybilling.ActualizarFacturaConPago(IdReserva_, _pago);
                    }
                    catch (WebException ex)
                    {
                        MensajeEx = ex.Message;
                        TipoMensaje_ = "WARN";
                    }
                }

                //Se asigna el mensaje de confirmación
                MensajeEx = "Se ha generado el pago de la reserva " + TicketReserva_ + " satisfactoriamente";
                TipoMensaje_ = "INFO";

            }
            catch (FaultException<PagosWS_.PagoException> ex)
            {
                MensajeEx = ex.Message;
                TipoMensaje_ = "WARN";
            }

            //Se retorna JSON
            return (Json(new { TipoMensaje = TipoMensaje_ , Message = MensajeEx }, JsonRequestBehavior.DenyGet));
        }
    }
}
